package pathFinderPackage;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import mainPackage.PathFinderListener;
import mapPackage.MapException;
import preferencePackage.Preference;

public abstract class IChercheurItineraire 
{
	protected ArrayList<PathFinderListener> listeners ;
	protected Itineraire m_itenaire =null;
	
	
	public IChercheurItineraire(){
		listeners = new ArrayList<PathFinderListener>();
	}
	
	public void trouverItineraire(String villeDepart , String villeArrivee , List<Preference> preferences , HashMap<String,Boolean> villesIntermediaires) throws MapException{
		
	}

	public void stopperLaRecherche(){
		
	}
		
	public void ajouterPathFinderListener(PathFinderListener ecouteur) 
	{
		if( ! this.listeners.contains(ecouteur))this.listeners.add(ecouteur);
		
	}

	public void enleverPathFinderListener(PathFinderListener ecouteur) 
	{
		if( this.listeners.contains(ecouteur))this.listeners.remove(ecouteur);
	}
	
	public synchronized void SolutionTrouvee( Itineraire solution ) {
		for( PathFinderListener pfl : this.listeners )
		{
			pfl.SolutionTrouvee(solution);
		}
	}
	
	public void MeilleureSolutionTrouvee( Itineraire solution ) {
		for( PathFinderListener pfl : this.listeners )
		{
			pfl.MeilleureSolutionTrouvee(solution);
 
		}
	}
	
	public void pasDeSolution( String villeD , String villeA , String pourquoi){
		for( PathFinderListener pfl : this.listeners )
		{
			pfl.pasDeSolution(villeD, villeA,pourquoi);
		}
	}
	
	public Itineraire getItineraire(){
		return m_itenaire;
	}
	
	
}
